Memory Operands

Data transfer instructions指令 (lw,sw)

把資料從記憶體搬移到暫存器

明確的告訴prossesor我們的資料將要被搬到哪一個暫存器
明確的指出我們要存取的資料的記憶體位址是在哪裡

記憶體可視為 : 
1D array一微陣列,用pointer存取他

Offset偏差 : 
以pointer作為基礎(pointer base)的偏差值

例子 : 8($t0)

t0當作register base
Offset : 8 bytes

有效記憶體 :
又因為register總共的長度是32個bit (8 bytes*4=32bits)
所以實際上在MIPS的架構有效記憶體的長度就是32個bit (2^32約4GB)

指令介紹 :

lw (load word)

把一個word從記憶體搬移到暫存器

lw $t0,12($s0)
lw /destination /offset /base register
<====================
把暫存器s0的值再加上12個bytes
當成是一個記憶體的位址
把它的值放到t0這個暫存器裡面

sw (store word)

把資料從register搬回memory (資料單元方向顛倒)

sw $t0,12($s0)
sw /destination /offset /base register
====================>
sw把t0這個暫存器裡面的值移動到 
以s0當成base再加上12個bytes作為Offset 所得到的記憶體位址

byte address以及word address

k1

4 byte = 1 word
每一個小方塊代表的是一個byte
而相同顏色的4個小方塊代表的是一個word

比較 :
把它們的記憶體位址用二進位的表示法來表示出來
byte address和word address相差四倍(2^2)
所以在byte address裡面 最低位元的兩個bit一定都會為0

Alignment

k2

所有的word當它被擺到記憶體的時候
實際上它的"起始位址"一定要是4個byte的整數倍

Endianness

因為一個word是由好幾個byte所共同組合而成的

word放到記憶體的時候
每一個byte所"擺放的順序"決定了它是 Big Endian 或是 Little Endian

data: 高位元 ---> 低位元 (想想二進位ex:10011 誰是高誰是低)

Big Endian (MIPS就是!)

把最高位元 放在word的起始位址

Little Endian (x86屬於此類)

把最低位元 放到word的起始位址

k3

現在有一組資料 :

最高位元     最低位元
       0 1 2 3

@ 記憶體位置由左邊開始(箭頭處)

例子 :

現在有一組資料 :

0A 0B 0C 0D

k4

results matching ""

    No results matching ""